#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
#define sz(x) (int)x.size()
#define clr(x,a) memset(x,a,sizeof(x))
int rd(){int x;scanf("%d",&x);	return x;}
const int maxn= 4100;
const int maxe =40000;
vector<int>block[maxn];
int n,m;
int is[maxn],ok[maxn];
int first[maxn],next[maxe],E[maxe],Ef[maxe],M;
void init()
{
	M=-1;
	clr(first,-1);
}

void insert(int a,int b)
{	
	M++;
	next[M]=first[a];
	first[a]=M;
	E[M]=b;
	Ef[M]=a;
	
}

/*********************求割点模板*******************/
int rt,cut[maxn],low[maxn],dfn[maxn],dindex,son;
void tarjan(int dep,int u)
{
	int i,j,e,v;
	dfn[u]=low[u]=dep;
	for(e=first[u]; e!=-1; e=next[e])
	{
		v=E[e];
		if(ok[v]) continue;
		if(!dfn[v])
		{
			tarjan(dep+1,v);
			if(u==rt)
				son++;
			else
			{
				low[u]=min(low[u],low[v]);
				if(low[v]>= dfn[u] )
					cut[u]=1;
			}
				
		}
		else	low[u]=min(low[u], dfn[v]);
	}
}
void solve(int x)//传入一个根节点,可以任选一个点作为跟节点（但是保证图是连通）
{
	clr(dfn,0);
	clr(cut,0);
	son=0;
	rt=x;
	dindex=0;
	tarjan(1,rt);
	if(son>1)
		cut[x]=1;
}
/*********************求割点模板*******************/
int col[maxn],num,to[maxn];
int dfs(int x,int now)
{
	col[x]=now;
	int i,j,v,e;
	for(e=first[x]; e!=-1; e=next[e])
	if(!ok[E[e]] && col[v=E[e]]==-1)
	{
		dfs(v,now);
	}
}
int main()
{
	int i,j,k,cas=0;
	int tp,t;
	while(scanf("%d%d",&n,&m),n||m)
	{
		int res=0;
		init();
		clr(ok,0);
		int x,y;int fx,fy;
		for(i=0; i<m; i++)
		{
			scanf("%d%d",&x,&y);
			insert(x,y);
			insert(y,x);
		}
		if(n==3)
		{
			printf("Case %d: %d\n",++cas,res);
		}
		else
		{
			for(i=1; i<=n; i++)
			{
				clr(to,0);
				ok[i]=1;
				clr(col,-1);
				num=0;
				for(j=1; j<=n; j++)
				if(!ok[j] &&  col[j]==-1)
					dfs(j,num++);
				
				int tp,now;
				for(j=1;j<=n; j++)
				if(j!=i)
				{
					int tp=col[j];
					to[tp]++;
				}
				if(num>=3)
				{
					res+=n-1;
				}
				else if(num==2)
				{
					int flag=0;
					for(j=0; j<num; j++)
					if(to[j]==1)
					{
						flag=1;
					}
					if(flag==1)
						res+=n-2;
					else
						res+=n-1;
				}
				else
				{
					int w=(i+1)%n+1;
					solve(w);
					for(j=1; j<=n; j++)
					if(i!=j)
					{
						if(cut[j])
							res++;
					}
				}
				ok[i]=0;
			}
			printf("Case %d: %d\n",++cas,res/2);
		}
	}
}

